/* ============================================================================
* 功能描述 ：主函数
* 作者       ：ggls
* 创建日期 ：2024.5.22
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/
/****************************************************************************/
/*	include files
*****************************************************************************/
#include "main.h"


/****************************************************************************/
/*	Local pre-processor symbols('#define')
*****************************************************************************/

/****************************************************************************/
/*	Global variable definitions(declared in header file with 'extern')
*****************************************************************************/


/****************************************************************************/
/*	Local type definitions('typedef')
*****************************************************************************/

/****************************************************************************/
/*	Local variable  definitions('static')
*****************************************************************************/
uint32_t Systemclock = 24000000;

/****************************************************************************/
/*	Local function prototypes('static')
*****************************************************************************/


/****************************************************************************/
/*	Function implementation - global ('extern') and local('static')
*****************************************************************************/

/*****************************************************************************
 ** \brief	 main
 **
 ** \param [in]  none   
 **
 ** \return 0
 *****************************************************************************/


u32 ms_counter = 0;

u32 s_counter = 0;

u32 sleep_delay = 0;

bit sleep_flag = 1;

bit timr_f;
static uart0_cmd	uart0_ctx;
static app_ctx_s	app_ctx;
bit product = 0;
bit kaji_sb;
bit sj_f;

bit peiwang_flag;



void _data_tx_pack(void)
{
	char ap_data[10];
	ap_data[0] = 0x01;
	ap_data[1] = 0x02;
	ap_data[2] = 0x03;
	ap_data[3] = 0x04;
	ap_data[4] = 0x05;
	ap_data[5] = 0x06;
	ap_data[6] = 0x06;
	ap_data[7] = 0x06;
	ap_data[8] = 0x06;
	Uart_Tx_buf(ap_data, 9);
	
	
	

}

void _data2_tx_pack(void)
{
	char ap_data[10];
	ap_data[0] = 0x01;
	ap_data[1] = 0x02;
	ap_data[2] = 0x03;
	ap_data[3] = 0x04;
	ap_data[4] = 0x05;
	ap_data[5] = 0x09;
	ap_data[6] = 0x09;
	ap_data[7] = 0x09;
	ap_data[8] = 0x09;
	Uart_Tx_buf(ap_data, 9);

}

void _data3_tx_pack(void)
{
	char ap_data[10];
	ap_data[0] = 0x01;
	ap_data[1] = 0x02;
	ap_data[2] = 0x03;
	ap_data[3] = 0x04;
	ap_data[4] = 0x05;
	ap_data[5] = 0x00;
	ap_data[6] = 0x00;
	ap_data[7] = 0x00;
	ap_data[8] = 0x00;
	Uart_Tx_buf(ap_data, 9);

}



void time_z(void)
{
	timr_f = 1;
}

char yingao[10] = { 0,188,167,148,
					141,125,111,
				98,93};


int main(void)
{		
	u8 ch[7];
	signed short t, h;
	char i;
    unsigned char Data_f;
	product = 0;

	
	Uart_Init();				// urat初始化	
	
	adc_switch_io_init();

	
	Hly_Key_Init();   			// 按键初始化
	
	TMR0_Config();				// time0初始化
	
	zigbee_io_init();
//	LSE_Config();				// 休眠时钟初始化
	
	 ADC_Config();				// adc初始化

	SYS_EnableWakeUp();			// 使能休眠唤醒
	
	

//	Zigbee_App_Init();			// zigbee应用初始化
	
//	Hly_muc_wakeup_io_init();	// zigbee唤醒muc初始化	
	BUZZER_Config(0x1070);
//	app_init();
	
	Mc_gpio_init();

	hly_Obtain_voltage();		// 开局测电量
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_0); 		//设置为输出模式
	P00 = 0;
#if 0

	Uart0_Tx_Byte(ch);

	while(1)
	{	
		Uart0_Tx_Data();
	}	
	return;
	signed short t, h;

#endif
	LED_flag = 0;

	timr_f = 1;
	sleep_flag = 1;
	sj_f = 0;
	buzz_on = 0;
	kaji_sb = 0;
	peiwang_flag = 0;
	P14 = 1;
	delayms(50);
	Hly_ctx_init();
	delayms(50);
	P14 = 0;

//	BUZ_EnableBuzzer();
	EPWM_Start(EPWM_CH_0_MSK);




	while(0)
	{		

		BUZ_ConfigBuzzer(BUZ_CKS_32,111);			//Fsys=24Mhz，Fbuz = Fsys/(2*32*200) =2khz
		delayms(500);
		BUZ_ConfigBuzzer(BUZ_CKS_32,126);			//Fsys=24Mhz，Fbuz = Fsys/(2*32*200) =2khz
				delayms(500);

		BUZ_ConfigBuzzer(BUZ_CKS_32,143);			//Fsys=24Mhz，Fbuz = Fsys/(2*32*200) =2khz
		delayms(500);

		
		


		

		

	}
	while(1)
	{	

	//	hly_Obtain_voltage();		// 开局测电量
		Zigbee_Cmd_handle();
		key_service();
		if(buzzer_on_off == 0)
		{
			if(P24 == 1 && P25 == 1)
			{
				if(buzzer_mute == 0)
				{
			//		BUZ_EnableBuzzer();		
					EPWM_Start(EPWM_CH_0_MSK);
				}
				else if(buzzer_mute == 1)
				{
					EPWM_Stop(EPWM_CH_0_MSK);
					BUZ_DisableBuzzer();
				}
			}
			else if(P24 == 0 || P25 == 0)
			{
				BUZ_DisableBuzzer();
				
				EPWM_Stop(EPWM_CH_0_MSK);
				buzzer_mute = 0;
			}
			
		}
	
	
		if(P25 == 0 || P24 == 0)
		{
			if(keysleep_flag == 0 && peiwang_flag == 0)
			{
			//	P14 = 0;
				P14 = 0;

				BUZ_DisableBuzzer();
				
				EPWM_Stop(EPWM_CH_0_MSK);
				GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_0); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_1); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_2); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_5); 		//设置为输出模式
					
				
				GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_4); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_3); 		//设置为输出模式
			
			
			//	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_7); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_1); 		//设置为输出模式GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_0); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_2); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_3); 		//设置为输出模式
				
				GPIO_ENABLE_INPUT(P2TRIS, GPIO_PIN_4); 		//设置为输出模式
			
				GPIO_ENABLE_INPUT(P2TRIS, GPIO_PIN_5); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_6); 		//设置为输出模式			

				
		//		GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_0); 		//设置为输出模式
				GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_1); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_2); 		//设置为输出模式
				GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_3); 		//设置为输出模式
				GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_5); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_4); 		//设置为输出模式

	//			P25 = 0;
	//			P24 = 0;
				
				SYS_EnterStop();
			}
	}

		
		
#if 0
		if(product == 1)
		{
			
			Hly_Product_Cmd_handle();
		}
		else if(product == 0)
		{
			App_Run();
			if(key_sleep == 0)
			{
				delayms(10);
				sleep_delay++;
				sleep_flag = 0;
			}


			if(sleep_delay >= 100)
			{
				sleep_flag = 1;
				key_sleep = 1;
				sleep_delay = 0;
			}

			if(sleep_flag == 1	&& io_wk_up == 0 && buzz_on == 0)
			{
				GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_0); 		//设置为输出模式
			//	GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_1); 		//设置为输出模式
			//	GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_2); 		//设置为输出模式
			//	GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_5); 		//设置为输出模式
			
			//	GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_6); 		//设置为输出模式
			
				
			//	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_4); 		//设置为输出模式
			
				GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_5); 		//设置为输出模式GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_0); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_6); 		//设置为输出模式
			//	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_7); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_1); 		//设置为输出模式GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_0); 		//设置为输出模式
			
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_5); 		//设置为输出模式
				GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_6); 		//设置为输出模式
			//	GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_5); 		//设置为输出模式
			//	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_4); 		//设置为输出模式

		//		GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_3); 		//设置为输出模式
				
		//		SYS_EnterStop();

			}
		}
#endif
#if 0
		//SYS_EnterStop();

			if(key_sleep == 0)
			{
				if(hly_get_elapsed_s(sleep_delay) >= 1)
				{
					sleep_delay = get_current_s();
					key_sleep = 1;
				//	SYS_EnterStop();
				}
					
			}
			if(key_sleep == 1)
			{
			//	SYS_EnterStop();
			}
#endif


//	_data_tx_pack();

 //   Data_f = SHT4XReadTemperatureAndHumidity(&t, &h); // 获取温湿度
//	Seg_san_on();
//	BUZ_EnableBuzzer();
//	delayms(200);

//	Seg_san_off();
//	BUZ_DisableBuzzer();

//	Hly_Temp_Hum_Obtain();	
//	delayms(200);
//		LSE_Stop(); 								//清计数器
//		LSE_Start();

			
	//	SYS_EnterStop();

	}	

}

void Hly_get_current(void)
{
		ms_counter++;
		if(ms_counter == 10000)
		{
			ms_counter = 0;
	
		}

}

void Hly_get_current_s(void)
{
		s_counter++;
		if(s_counter == 100000)
		{
			s_counter = 0;
	
		}

}
unsigned long get_current_s(void)
{
    return s_counter;
}


unsigned long get_current_ms(void)
{
    return ms_counter;
}

void hly_time_start(void) 
{
 char min1 ;
 char min10 ;
 char hour1 ;
 char hour10;
	
	// 更新秒数
	char sj;
    data1.sec++;

    // 更新分钟
    if (data1.sec == 60) {
        data1.sec = 0;
		sj = 1;
        data1.min++;  
    }

    // 更新小时
    if (data1.min == 60) {
        data1.min = 0;
        data1.hour++; 
    }

	if(data1.hour == 24)
	{
		data1.hour = 0;
	}

    // 提取分钟和小时的个位和十位
  min1 = (data1.min % 10);
  min10 = (data1.min /10% 10);
  hour1 = (data1.hour % 10);
  hour10 = (data1.hour/10 % 10);

    // 更新LCD显示
    if(sj == 1)
    {
	    Write_Lcd_Storage(min_1, min1);
	    Write_Lcd_Storage(min_2, min10);
	    Write_Lcd_Storage(hour_1, hour1);
	    Write_Lcd_Storage(hour_2, hour10);
	    Seg_Set_Data();
		sj = 0;
   	}
}


#if 0


void Uart0_Cmd_Process(void)
{
	if(uart0_ctx.cmd_flag == true)
	{
		int i, len;
		if (uart0_ctx.rbuf[2] = app_ctx.ver)
		{
			switch (uart0_ctx.rbuf[5])
			{
				case UNBIND_NOTIFICATION:
					_data_tx_pack();
					break;
				case QUERY_PRODUCT:				
					_data_tx_pack();
					//Uart0_Tx_Byte(uart0_ctx.rbuf,12);
					break;
				case REPORT_NETWORK:
					
					break;
				case ZIGBEE_COMMAND_ISSUANCE:
					
					break;
				default:
			return;
				
			}
			uart0_ctx.cmd_flag = false;
		}
	}
}


void Uart0_Tx_Byte(uint8_t *buf,uint16_t length)
{
	int i;
	for (i = 0; i < length; i++)
	{
		UART_SendBuff(UART0, *buf);
		buf++;
		while(UART_GetSendIntFlag(UART0) == 0);
			
	}
	
}


char putchar (char ch)
{
	SBUF0 = ch;
	while( !(SCON0 & (1<<1)));
	SCON0 &=~(1<<1);		
	return 0;
}

void Uart0_Tx_Byte(const char  *s)
{
	while(*s)
	{
		putchar(*s);
		s++;		
	}
}

#endif

#if 0
void TMR1_Config(void)
{
	/*
	(1)设置Timer的运行模式
	*/
	TMR_ConfigRunMode(TMR1, TMR_MODE_TIMING,TMR_TIM_16BIT); 
	/*
	(2)设置Timer 运行时钟
	*/
	TMR_ConfigTimerClk(TMR1, TMR_CLK_DIV_12);						/*Fsys = 24Mhz，Ftimer = 2Mhz,Ttmr=0.5us*/
	/*
	(3)设置Timer周期
	*/	
	TMR_ConfigTimerPeriod(TMR1, (65536-200)>>8, 65536-200); 				// 200*0.5us = 100us,递增计数
		
	/*
	(4)开启中断
	*/
	TMR_EnableOverflowInt(TMR1);

	/*
	(5)设置Timer中断优先级
	*/	
	IRQ_SET_PRIORITY(IRQ_TMR1,IRQ_PRIORITY_LOW);
	IRQ_ALL_ENABLE();	

	/*
	(6)开启Timer
	*/
	TMR_Start(TMR1);
}

#endif



